package com.tansuo365.test1.controller.othercontrol;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.tansuo365.test1.bean.otherbean.Kufang;
import com.tansuo365.test1.service.otherservice.DKufangService;
import com.tansuo365.test1.service.otherservice.KufangService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/admin/kufang")
public class KufangController {

    @Autowired
    private KufangService kufangService;
    @Autowired
    private DKufangService dKufangService;

    @PostMapping("/loadKufangTree")
    public String loadKufangTree(){
        return getAllByParentId(-1).toString();
    }

    @RequestMapping("/save")
    public Map<String,Object> save(Kufang kufang){
        Map<String, Object> resultMap = new HashMap<>();
        if(kufang.getP_id()==-1){  //一级菜单
            kufang.setIcon("icon-folderOpen");
            kufang.setState(1);
        }else { //二级菜单
            kufang.setIcon("icon-folder");
            kufang.setState(2);
        }

        kufangService.insertSelective(kufang);
//
        resultMap.put("success", true);
        return resultMap;
    }

    @RequestMapping("/delete")
    public Map<String,Object> delete(int id){
        Map<String, Object> resultMap = new HashMap<>();
        Kufang kufang=kufangService.selectByPrimaryKey(id); //获取要删除的数据
        //查看该项目是否是一级,一级下面是否有二级
        List<Kufang> secondKufangList = kufangService.findByParentId(kufang.getId());
        int secondSize = secondKufangList.size();
        System.out.println("secondSize:"+secondSize);
        if(secondSize>0){ // 如果有对应二级项目,则同时一并删除
            Integer[] ids = new Integer[secondSize];
            for(int i=0; i<secondSize;i++){
                Integer everyId = secondKufangList.get(i).getId();
                ids[i]=everyId;
            }
            kufangService.deleteBatchByPKArr(ids); //批量删除二级项目分类
            dKufangService.deleteBatchByWidArr(ids);//批量删除二级项目列表
            kufangService.deleteByPrimaryKey(id);//删除一级项目分类
            dKufangService.deleteByWid(id);//删除一级项目分类对应的列表
        }else{
            //假设其size不大于0,则只删除一级菜单和其对应项目列表
            kufangService.deleteByPrimaryKey(id); // 删除
            dKufangService.deleteByWid(id);
        }
        resultMap.put("success", true);
        return resultMap;
    }

    /**
     * 根据父节点递归获取所有商品类别信息
     * 渲染树形第一步
     * @param parentId
     * @return
     */
    public JsonArray getAllByParentId(Integer parentId){
        JsonArray jsonArray=this.getByParentId(parentId);
        for(int i=0;i<jsonArray.size();i++){
            JsonObject jsonObject=(JsonObject) jsonArray.get(i);
            //如果是二级菜单,则不再继续添加子项
            if("second".equals(jsonObject.get("state").getAsString())){
                continue;
                //如果是一级菜单,则查找一级下面是否有二级菜单
            }else if("first".equals(jsonObject.get("state").getAsString())){
                System.out.println("建立了children子集,数据ID:"+jsonObject.get("id"));
                jsonObject.add("children", getAllByParentId(jsonObject.get("id").getAsInt()));
            }else{

            }
        }
        return jsonArray;
    }

    /**
     * 根据父节点查询子节点
     * @param p_id
     * @return
     */
    private JsonArray getByParentId(Integer p_id){
        JsonArray jsonArray=new JsonArray();
        //获取了第一组 [一级] 树形菜单
        List<Kufang> kufangList=kufangService.findByParentId(p_id);
        for(Kufang kufang:kufangList){
            //回传的jsonArray的item
            JsonObject jsonObject=new JsonObject();
            jsonObject.addProperty("id", kufang.getId()); // 节点id
            jsonObject.addProperty("text", kufang.getKufangmingcheng()); // 节点名称
            if(kufang.getState()==1){
                jsonObject.addProperty("state", "first"); // 根节点 一级
            }else if(kufang.getState()==2){
                jsonObject.addProperty("state", "second"); // 叶子节点 二级
            }else{

            }
            jsonObject.addProperty("iconCls", kufang.getIcon());
            JsonObject attributeObject=new JsonObject(); // 扩展属性
            attributeObject.addProperty("state",kufang.getState()); // 节点状态 [一级/二级]
            jsonObject.add("attributes", attributeObject);
            jsonArray.add(jsonObject);
        }
        return jsonArray;
    }
}
